Анализ поведения пользователей мобильного приложения

Существует стартап, который продаёт продукты питания.

На первом этапе необходимо разобраться:

Дизайнеры захотели поменять шрифты во всём приложении, а менеджеры испугались, что пользователям будет непривычно. Договорились принять решение по результатам A/A/B-теста. Пользователей разбили на 3 группы: 2 контрольные со старыми шрифтами и одну экспериментальную — с новыми. Провели A/A/B-тестирование.

На втором этапе необходимо исследовать результаты A/A/B-эксперимента и выяснить, какой шрифт лучше.

Загрузка данных и изучение общей информации

Загрузка библиотек

Мой основной инструмент — pandas. Я подключаю эту библиотеку. Также подключаю библиотеки, seaborn, re, numpy и matplotlib - они понадобятся для моих исследований.

Дополнительно отключу предупреждения (библиотека warnings).

Загрузка и описание данных

Осуществляю чтение файла данных о заведениях общественного питания Москвы logs_exp.csv из папки /datasets и сохраняю его в переменной data. Вывожу на экран первые пять строк таблицы.

Данные склеены в одну строку вместо того, чтобы разбиться по колонкам. Нужно указать верный разделитель \t, как видно из таблицы выше:

Выводы по разделу

Итак, полученные данные отформатированы, отображены и предварительно пранализированы. Таблица содержит 4 столбца и 244126 строк.

Согласно документации к данным:

На этапе предварительного анализа выявлено:

Подготовка данных к анализу

Восстановление стиля названий столбцов

Для начала восстановлю стиль названий для тех колонок, где обнаружены нарушения, а именно составное имя переменной написано без знака подчёркивания - слитно и заглавные буквы:

Обработка формата даты и времени

Формат столбца event_time - это UNIX-время или POSIX-время (англ. Unix time) - способ кодирования времени, принятый в UNIX и других POSIX-совместимых операционных системах. Моментом начала отсчёта считается полночь (по UTC) с 31 декабря 1969 года на 1 января 1970. Время UNIX согласуется с UTC, поэтому необходимо перевести дату в человекопонятный формат в соответствии с часовым поясом для Москвы.

Разделю полученную дату на столбец дат и столбец времени, так будет целесообразнее для последующего анализа.

Обработка дубликатов

Выводы по разделу

На этапе предобработки данных:

Изучение и проверка данных

Оценка исходных данных

Расхождение в полученных значениях связано с тем, что в один и тот же момент времени один и тот же пользователь смог выполнить несколько событий одновременно. Буду считать, что такое возможно и приму общее количество логов за 243713.

Имеющиеся данные относятся к периоду времени с 25 июля по 8 августа 2019 года.

По полученной гистограмме можно увидеть, что с начала исследуемого периода и до конца июля данных по активности пользователей мало, однако с начала августа и до конца исследуемого периода наблюдается совешенно другой характер активности. Здесь несколько вариантов, или приложение начало свою работу с определенного момента в середине исследуемого периода, либо (что скорее всего) предоставленные данные неполные. По существующей информации технически в логи новых дней по некоторым пользователям могут «доезжать» события из прошлого, поэтому это может «перекашивать данные».

Необходимо определить дату, с какого момента данные являются полными, и отсечь более старые данные. Визуально можно увидеть, что скачок произошел где-то в конце июля, начале августа.

По полученной выборке однозначно можно сделать вывод, что наиболее полные данные представлены с 1 по 7 августа 2019 года. Именно эти данные будут принимать участие в анализе. Неполные данные с обеих сторон будут исключены из датафрейма.

Оценка актуальных данных

Проверю, много ли событий и уникальных пользователей я потеряла, отбросив старые данные.

Проверю, все ли 3 экспериментальные группы представлены в отобранных данных после отсеивания старых данных.

Выводы по разделу

Полученные исходные данные соответствуют периоду времени с 25 июля по 8 августа 2019 года. Данная выборка содержит информацию по 243713 событиям, совершенным в мобильном приложении 7551 пользователем. По 3 группам тестирования пользователи распределены практически идеально в равных долях:

После проведения анализа выявлено, что не все предоставленные данные за данный период являются полными. По существующей информации технически в логи новых дней по некоторым пользователям могут «доезжать» события из прошлого, поэтому это может «перекашивать данные». В связи с этим было принято решение отсечь временные отрезки, где данных не хватает, а именно период с 25 июля по 31 июля и дату 8 августа.

В итоге актульные данные, которые будут исследованы, имеют следующие характеристики:

При удалении старых данных из исходной выборки потеряно менее 1% от общего числа событий, а количество потерянных уникальных пользователей составило 0.002% от общего количества пользователей, что не может повлиять на результаты последующего анализа.

Изучение воронки событий

В логе представлена информация по 5 событиям:

Из полученных данных и графика можно увидеть, что чаще у пользователей открыта главная страница, далее экран с предложением, потом страница с проведением оплаты, реже - экран у успешной оплатой. И очень редко пользователи открывают страницу с руководством.

Рассчитаю, сколько пользователей совершали каждое из этих событий. Посчитаю долю пользователей, которые хоть раз совершали то или иное событие. Построю воронку переходов на страницы мобильного приложения.

Построение маркетинговой воронки.

Из полученных данных можно увидеть, что почти все пользователи переходят на главный экран (98.5%), на экран с предложениями заходят около 60%, на экран оплаты переходит половина от всех пользователей, а экран с успешной оплатой появляется у 47% пользователей, только 11% переходят на экран с руководством. Можно предположить, что правильная последовательность - это:

Главный экран -> экран предложения -> экран оплаты -> экран успешной оплаты

Скорее всего, руководство - это экран, не относящийся к данной воронке, это опциональное окно, на которое можно зайти, а можно и не заходить, его не нужно учитывать при расчёте конверсии.

Построю распределение по датам, определю шаги воронки следующим обрзоам:

Рассчитаю конверсию от шага к шагу, чтобы определить, на каком шаге теряются пользователи, а также долю пользователей, прошедших все шаги до успешной оплаты.

Выводы по разделу

Данные проанализированы и сделаны следующие выводы:

Почти все пользователи из выборки переходят на главный экран (98.5%), на экран с предложениями заходят около 60%, на экран оплаты переходит половина от всех пользователей, а экран с успешной оплатой появляется у 47% пользователей, только 11% переходят на экран с руководством.

Воронкой событий принята следующая последовательность:

Главный экран -> экран предложения -> экран оплаты -> экран успешной оплаты

В результате проведенных исследований выявлено, что большинство пользователей теряется на первом шаге перехода с главной страницы на страницу с предложением, средняя конверсия на этом шаге составляет составляет всего 39%, минимальная конверсия на этом шаге может достигать 34.5%. Однако те, кто смотрит предложение, в среднем с 90% вероятностью переходят на страницу оплаты - это очень хороший показатель конверсии, 2 августа он достиг почти 96%. На этапе оплаты теряется в среднем около 20% пользователей.

Доля пользователей, прошедших все шаги до успешной оплаты составляет около 30%.

Оценка результатов эксперимента

Пользователи разбиты на 3 группы: 2 контрольные со старыми шрифтами (246 и 247) и одну экспериментальную — с новыми (248). Рлсчитаю количество пользователей в группах.

В процентном соотношении по 3 группам тестирования пользователи распределены равномерно, количество пользователей в группах различается не более, чем на 1%, что является критерием успешного проведения статистических тестов:

Проверка корректности контрольных групп

246 и 247 группы - это контрольные группы для А/А-эксперимента для проверки корректности всех механизмов и расчётов. До начала исследования необходимо проверить, нет ли пересечений пользователей между группами, т.к. если один и тот же пользователь находится в разных экспериментальных группах, может быть нарушена чистота эксперимента.

Не найдено ни одного пользователя, задействованного более, чем в 1 группе. это значит, что разделение пользователей на группы - корректно.

Подготовка данных для проведения проверок

По графику можно заметить, что доля пользователей, совершивших каждое событие, в группах различется. Необходимо выяснить, статистически значимые ли эти отличия, или нет.

Напишу функцию, определяющую, достаточна ли разница в пропорциях при указанных размерах выборок, чтобы говорить о статистически значимом различии в группах.

Выбор критического уровня статистической значимости

В моём исследовании предстоит провести несколько сравнений на одних и тех же данных — это является множественным тестом. Его важная особенность в том, что с каждой новой проверкой гипотезы растёт вероятность ошибки первого рода, т.е. получения ложнопозитивного результата данного статистического теста.

Я буду проверять 16 гипотез о статистической значимости, а именно:

Чтобы снизить вероятность ложнопозитивного результата при множественном тестировании гипотез, а именно, уточнить критический уровень статистической значимости со стандартных 5% я буду использовать поправку Бонферрони, т.е. разделю уровень значимости на число проверяемых гипотез.

Z-тест в группах 246 / 247

На первом этапе необходимо проверить, находят ли статистические критерии разницу между контрольными выборками.

Для этого рассчитаю число пользователей, совершивших каждое из событий в воронке для каждой из контрольных групп (246 и 247). Посчитаю долю пользователей, совершивших каждое событие, и проверю, будет ли отличие между группами статистически достоверным.

Буду проверять результаты z-теста для 4 шагов в 2-ух контрольных группах: 246 и 247. Параметры для написанной функции будут следующие:

Сформулирую нулевую и альтернативные гипотезы, которые буду проверять:

По полученным результатам z-теста можно разбиение на контрольные группы А/А считать корректным. Две контрольные группы оказались равны, поэтому можно быть уверенным в точности проведенного тестирования.

Z-тест в группах 246 и 247 / 248

Проведу Z-тест для группы с изменённым шрифтом (248). Для достоверности результатов я буду сравнивать экспериментальную группу 248 с каждой их контрольных групп (246 и 247). Параметры для функции расчета будут следующие:

Нулевая и альтернативная гипотезы, которые буду проверять:

На данном этапе проверок выяснено, что статистически значимая разница между группами отсутствует по всем этапам воронки.

Z-тест в объединенной группе (246 и 247) / 248

Нулевая и альтернативная гипотезы, которые буду проверять:

На данном этапе проверок определено, что статистически значимая разница между контрольной объединённой группой и экспериментальной группой также отсутствует по всем этапам воронки.

Выводы по разделу

Проведено исследование результатов A/A/B-эксперимента.

Проверено 16 гипотез на одних и тех же данных. Для снижения вероятности ложнопозитивного результата при множественном тестировании гипотез, с использованием поправки Бонферрони уточнен критический уровень статистической значимости со стандартных 5% до 0.31%.

По результатам z-теста определено, что контрольные группы равны, поэтому разбиение можно считать корректным.

Проведены тесты по определению статистической значимости между контрольными группами по-отдельности, а также объединенной контрольной группы с экспериментальной группой. Определено, что статистически значимая разница между группами отсутствует по всем этапам воронки, из чего можно сделать вывод, что изменение шрифтов никак не повлияло на активность пользователей в приложении.

Общий вывод

Итак, данные о событиях пользователей мобильного приложения за период с 25 июля по 8 августа 2019 года получены, отформатированы, предварительно пранализированы.

На этапе предобработки данных:

На этапе подготовки данных к анализу выявлено, что не все предоставленные данные за период являются полными. Работа велась по скорректированным данным за период с 1 по 7 августа 2019 года, остальные данные были исключены из анализа.

Актульные данные, подлежащие исследованию, имеют следующие характеристики:

При удалении старых данных из исходной выборки потеряно менее 1% от общего числа событий, а количество потерянных уникальных пользователей составило 0.002% от общего количества пользователей, что не повлияло на результаты статистических тестов.

Проанализирована воронка событий. Главный экран -> экран предложения -> экран оплаты -> экран успешной оплаты.

Почти все пользователи из выборки переходят на главный экран (98.5%), на экран с предложениями заходят около 60%, на экран оплаты переходит половина от всех пользователей, а экран с успешной оплатой появляется у 47% пользователей.

В результате проведенных исследований выявлено, что большинство пользователей теряется на первом шаге перехода с главной страницы на страницу с предложением, средняя конверсия на этом шаге составляет составляет всего 39%, минимальная конверсия на этом шаге может снижаться до 34.5%. Однако те, кто смотрит предложение, в среднем с 90% вероятностью переходят на страницу оплаты - это очень хороший показатель конверсии, 2 августа он достиг почти 96%. На этапе оплаты теряется в среднем около 20% пользователей.

Доля пользователей, прошедших все шаги до успешной оплаты составляет около 30%.

Что касается изменения шрифтов в приложении, то можно с уверенностью сказать, что изменение шрифта никак не повлияет на пользовательскую активность, это проверено 3 статистическими тестами (+ дополнительный тест для контрольных групп для повышения точности проводимого тестирования), которые показали, что статистически значимая разница между группами с разными шрифтами отсутствует, даже с учётом поправки на критический уровень статистической значимости вследствии множественного тестирования.